home *** CD-ROM | disk | FTP | other *** search
- #include "bbs.h"
- extern int ValidUser;
-
- int CheckifNameAllowed(char *name)
- {
- char *s;
- char **tooltypes;
- struct DiskObject *dobj;
- int num=1;
- sprintf(GSTR1,"%sNamesNotAllowed",Cmds->BBSLoc);
- if(dobj=GetDiskObject(GSTR1))
- {
- tooltypes=dobj->do_ToolTypes;
- sprintf(GSTR1,"NAME.%d",num++);
- while(s=FindToolType(tooltypes,GSTR1))
- {
- if(!stricmp(name,s))
- {
- FreeDiskObject(dobj);
- AEPutStr("Username not allowed!!\r\n\r\n");
- return(1);
- }
- sprintf(GSTR1,"NAME.%d",num++);
- }
- FreeDiskObject(dobj);
- } else {
- sprintf(GSTR1,"ERROR! you are missing the %sNamesNotAllowed file\n",Cmds->BBSLoc);
- CallersLog(GSTR1);
- AEPutStr(GSTR1);
- SendChar('\r');
- sprintf(GSTR1,"No new users will be allowed to join!\n");
- CallersLog(GSTR1);
- AEPutStr(GSTR1);
- SendChar('\r');
- return(1);
- }
- return(0);
- }
-
- static int IsStrDigits(char *s)
- {
- int loop;
-
- for(loop=0; loop<strlen(s); loop++) {
- if(!(s[loop]>='0'&&s[loop]<='9')) {
- AEPutStr("\r\nNumbers only please!\r\n\r\n");
- return(0);
- }
- }
- return(1);
- }
-
- int NumberOfLinesTest(void)
- {
- int stat;
- char str[20];
-
- for(stat=70; stat>1; stat--) {
- sprintf(str," %d\r\n",stat);
- AEPutStr(str);
- }
- AEPutStr("\r\nEnter the number you see at the top of your screen: ");
- stat=LineInput("",str,3,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
- if(str[0]=='\0') return(1);
- stat=IsStrDigits(str);
- if(!stat) return(0);
- stat = (int)atol(str);
- if(stat < 1 || stat > 255) return(0);
- User.LineLength=(UBYTE)stat;
- return(1);
- }
-
- int ChooseComputer(void)
- {
- int stat;
-
- for(stat=0;stat<ComputerEntries;stat+=2) {
- sprintf(GSTR1,"%2d> %-34s ",stat,ComputerTypes[stat]);
- AEPutStr(GSTR1);
- if((stat+1)<ComputerEntries) {
- sprintf(GSTR1,"%2d> %-34s\r\n",stat+1,ComputerTypes[stat+1]);
- AEPutStr(GSTR1);
- }
- else AEPutStr("\r\n");
- }
- AEPutStr("\r\n");
-
- JLoop5:
- AEPutStr("Enter computer type: ");
- stat=LineInput("",GSTR1,3,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
- if(strlen(GSTR1)==0) return(1);
- if(!(stat=IsStrDigits(GSTR1))) goto JLoop5;
-
- User.Sec_Bulletin=(USHORT)atol(GSTR1);
- if(User.Sec_Bulletin < 0 || User.Sec_Bulletin >= ComputerEntries) goto JLoop5;
- return(0);
- }
-
- int JCom(void)
- {
- int ch, stat;
- char string[200];
- struct User TUser;
- struct UserKeys TUserkeys;
- int i;
-
- if(User.Slot_Number>0) return(FAILURE);
-
- Find_Open_Account(&User,&User_keys);
-
-
- /* show as new user */
- StatPrintUser(&User);
-
- AEPutStr("\r\n");
- sprintf(GSTR1,"%sJoin",Sopt->NodeScreen);
- if(!(stat=ChecktoDisplay(GSTR1,GSTR3,0,1)))
- UnAvailNotice(GSTR3,GSTR1);
-
- JLoop1:
- AEPutStr("\r\n");
- AEPutStr("Blank line to retreat\r\n");
-
- ch=0;
- IJLoop:
- // change to variable
- for(i = 0; i < 5; i++) {
- AEPutStr("\r\nEnter your Handle: ");
- /*** MAKE KEYBOARD_TIMEOUT A VARIABLE */
- stat=LineInput(User.Name,User.Name,30,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
-
- if(strlen(User.Name)==0) {
- ch++;
- if(ch>5) {
- AEPutStr("Too Many Errors, Goodbye!\r\n");
- return(FAILURE);
- }
- continue;
- // goto IJLoop;
- }
-
- if(strlen(User.Name)==1) {
- AEPutStr("Get REAL!! One Character???\r\n");
- // goto IJLoop;
- continue;
- }
- strcpy(string,User.Name);
-
- if(stat=CheckifNameAllowed(string)) {
- continue; // goto IJLoop;
- }
-
- strcpy(string,User.Name);
-
- AEPutStr("\r\nChecking for duplicate name...");
- stat=CheckForAst(string);
-
- if(stat) {
- AEPutStr("No wildcards allow in a name.\r\n");
- continue; // goto IJLoop;
- }
-
- stat=Find_User_From_Name(1,string,&TUser,&TUserkeys);
- if(stat!=0) {
- AEPutStr("Already in use!, try another.\r\n");
- continue; // goto IJLoop;
- }
- AEPutStr("Ok!\r\n\r\n");
- goto JLoop2;
- }
-
- AEPutStr("Too Many Errors, Goodbye!\r\n");
- return(FAILURE);
-
- //--- end new loop1
-
-
-
- JLoop2:
- AEPutStr("City, State: ");
- stat=LineInput("",User.Location,29,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
- if(strlen(User.Location)==0) goto IJLoop;
-
- JLoop3: AEPutStr("Phone Number: ");
- stat=LineInput("",User.PhoneNumber,12,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
- if(strlen(User.PhoneNumber)==0) goto JLoop2;
-
- JLoop4: AEPutStr("Enter a PassWord: ");
- stat=LineInput("",GSTR1,32,KEYBOARD_TIMEOUT);
- if(stat<0) return(stat);
- if(strlen(GSTR1)==0) goto JLoop3;
- strupr(GSTR1); // make uppercase!
- AECryptCpy(User.PassKey,GSTR1); // save encryped pass
-
- JLoop41:
- stat=NumberOfLinesTest();
- if(stat<0) return(stat);
- if(stat==0) goto JLoop4;
-
- AEPutStr("\r\n");
-
- if(stat=ChooseComputer())
- {
- if(stat<0) return(stat);
- goto JLoop41;
- }
-
- AEPutStr("\r\n");
-
- /* (RTS) added */
- User_keys.baud_rate = Online_Baud;
- User_keys.Userflags = 0;
- User_keys.Userflags = (UWORD) (USER_NEWMSG);
- AEPutStr("You want Screen Clears after Messages ? ");
- ch=Check_Online_Status();
- if(ch<0) return(ch);
- ch=ReadChar(KEYBOARD_TIMEOUT);
- if(ch<0) return(ch);
- if(ch=='Y' || ch=='y') {
- User_keys.Userflags |= USER_SCRNCLR; /* screen clear code sent */
- AEPutStr("Yes..\r\n\r\n");
- }
- else AEPutStr("No!\r\n\r\n");
- //(RTS) was Full Name
- sprintf(string,"Handle: %s\r\n",User.Name);
- AEPutStr(string);
- sprintf(string,"City, St.: %s\r\n",User.Location);
- AEPutStr(string);
- sprintf(string,"Phone Num: %s\r\n",User.PhoneNumber);
- AEPutStr(string);
- sprintf(string,"Num Lines: %d\r\n",User.LineLength);
- AEPutStr(string);
- AEPutStr("PassWord : ENCRYPTED\r\n");
- sprintf(string,"Computer : %s\r\n",ComputerTypes[User.Sec_Bulletin]);
- AEPutStr(string);
- AEPutStr("Scrn Clr : ");
- if(User_keys.Userflags & USER_SCRNCLR) AEPutStr("YES\r\n");
- else AEPutStr("NO\r\n");
- AEPutStr("\r\n");
- PurgeLine();
- AEPutStr("Is the above Correct? ");
-
- FOREVER {
- ch=Check_Online_Status();
- if(ch<0) return(ch);
- ch=ReadChar(KEYBOARD_TIMEOUT);
- if(ch<0) return(ch);
- if(ch=='N' || ch=='n' || ch=='Q' || ch=='q') {
- AEPutStr("No!\r\n\r\n");
- goto JLoop1;
- }
- if(ch=='Y' || ch=='y') break;
- else continue;
- }
- AEPutStr("Yes..\r\n\r\n");
- InitUser(&User,&User_keys);
- BytesADL = User.Daily_Bytes_Limit;
- ConvertAccess();
-
- User_keys.Number=User.Slot_Number;
-
- //(RTS)
- User_keys.baud_rate = Online_Baud; /* hold last logged on baud rate */
- ValidUser=0; /* not a valid user yet */
-
- StatPrintUser(&User);
-
- PurgeLine();
-
- stat=Question(); /* fill out questioneer */
- if(stat < (-1)) return(stat);
-
- //(RTS) dont save account until after questioneer is filled out
- ValidUser=1; /* ok script done */
- Save_Account(&User,&User_keys,0,0);
- StatPrintUser(&User);
- ClearMsgPointers();
- MasterSavePointers();
- sprintf(GSTR1,"%sJoined",Sopt->NodeScreen);
- if(!(stat=ChecktoDisplay(GSTR1,GSTR3,0,1)))
- UnAvailNotice(GSTR3,GSTR1);
-
- ch=DoPause();
- if(ch<0) return(ch);
- return(SUCCESS);
- }
-
- void InitUser(struct User *u,struct UserKeys *k)
- {
- sprintf(GSTR1,"%sACCESS/Preset.1",Cmds->BBSLoc);
- GetFromIconStr(GSTR1,"PRESET.AREA",u->Conference_Access);
-
- /* fill in default 'user.data' */
-
- u->Sec_Status = IntFromIcon(GSTR1,"PRESET.ACCESS");
- u->Sec_Board = IntFromIcon(GSTR1,"PRESET.RATIO_TYPE");
- u->Sec_Library = IntFromIcon(GSTR1,"PRESET.RATIO");
- u->Time_Limit = IntFromIcon(GSTR1,"PRESET.TIME_LIMIT");
- u->ConfRJoin = IntFromIcon(GSTR1,"PRESET.CONFRJOIN");
- u->Daily_Bytes_Limit = IntFromIcon(GSTR1,"PRESET.DAILY_BYTE_LIMIT");
- u->Time_Total = u->Time_Limit;
- u->Time_Used = 0L;
- u->New_User = 1;
- u->Messages_Posted = 0;
- u->NewSinceDate = 0;
- u->Uploads = 0;
- u->Downloads = 0;
- u->Times_Called = 0;
- u->Bytes_Download = 0L;
- u->Bytes_Upload = 1L;
- u->Daily_Bytes_Dld = 0L;
- u->ConfYM1 = 0L;
- u->ConfYM2 = 0L;
- u->ConfYM3 = 0L;
- u->ConfYM4 = 0L;
- u->ConfYM5 = 0L;
- u->ConfYM6 = 0L;
- u->ConfYM7 = 0L;
- u->ConfYM8 = 0L;
- u->ConfYM9 = 0L;
- u->ConfRead2 = 0L;
- u->ConfRead3 = 0L;
- u->ConfRead4 = 0L;
- u->ConfRead5 = 0L;
- u->XferProtocol = 0;
- u->Lcfiles = 0;
- u->BadFiles = 0;
- u->Filler2 = 0;
- u->ScreenType = 0;
- u->Expert = 'N';
- u->AccountDate = time(NULL);
- strcpy(u->PassKey,"");
-
- if(u->ConfRJoin==NULL) u->ConfRJoin=1;
-
- /* fill in default 'user.keys' */
-
- strcpy(k->UserName,u->Name);
- strupr(k->UserName);
- k->Number = u->Slot_Number;
- k->DNcps = 0;
- k->UPcps = 0;
- k->baud_rate = 0L; /* hold last logged on baud rate */
-
-
- }
-
- static int Questionaire(char *filename,char *Afilename)
- {
- int ch,stat;
- char c[200],string[200],date[20],Dtime[30];
- char *p;
- FILE *fp2,*fp1;
-
- QAgain:
-
- sprintf(string,"%sNode%u/TempAns",Cmds->BBSLoc,Cmds->AcLvl[LVL_NODE_NUMBER]);
-
- if(!(fp1=fopen(string,"w"))) {
- return(GOODBYE);
- }
-
- time(&Time_system);
-
- strcpy(c,ctime(&Time_system));
- c[strlen(c)-1]='\0';
-
- Convert_CTime_To_Date(c,date,Dtime);
-
- fprintf(fp1,"**************************************************************\n");
- fprintf(fp1,"%s (%s) [%hu] %s (%s) %s\n",date,Dtime,User.Slot_Number,User.Name,ConnectString,User.Location);
-
- fclose(fp1);
- sprintf(GSTR1,"%sCommands/SysCmd/",Cmds->BBSLoc);
- strcpy(GSTR2,"SCRIPT");
- if(!CustomCommand(GSTR1,GSTR2,1))
- {
- fp2=fopen(filename,"r");
- if(fp2==NULL) return(SUCCESS);
- if(!(fp1=fopen(string,"a"))) return(GOODBYE);
-
- // read & verify Questionaire
- while(fgets(c,120,fp2)!=NULL) {
- if(c[strlen(c)-2]!='~') {
- AEPutStr(c);
- AEPutStr("\r");
- fprintf(fp1,"%s",c);
- } else {
- c[strlen(c)-2]='\0';
- AEPutStr(c);
- fputs(c,fp1);
- stat=LineInput("",string,70,KEYBOARD_TIMEOUT);
- if(stat<0) {
- fclose(fp1);
- fclose(fp2);
- return(stat); //(RTS)
- // return(0);
- }
- fprintf(fp1,"%s\n",string);
- }
- }
-
- fclose(fp1);
- fclose(fp2);
- }
-
- AEPutStr("\r\n");
-
- AEPutStr("Is the above Correct? ");
-
- FOREVER {
- ch=Check_Online_Status();
- if(ch<0) return(ch);
- ch=ReadChar(KEYBOARD_TIMEOUT);
- if(ch<0) return(ch);
- if(ch=='N' || ch=='n' || ch=='Q' || ch=='q') {
- AEPutStr("No!\r\n\r\n");
- goto QAgain;
- }
- if(ch=='Y' || ch=='y') break;
- else continue;
- }
- AEPutStr("Yes..\r\n\r\n");
-
- if(!(fp1=fopen(Afilename,"r")))
- fp1=fopen(Afilename,"w");
- else {
- fclose(fp1);
- fp1=fopen(Afilename,"a");
- }
-
- sprintf(string,"%sNode%u/TempAns",Cmds->BBSLoc,Cmds->AcLvl[LVL_NODE_NUMBER]);
- if((fp2=fopen(string,"r"))) {
- for(;;) {
- if(!(p=fgets(c,120,fp2))) break;
- fputs(c,fp1);
- }
- fclose(fp1);
- fclose(fp2);
- }
- return(SUCCESS);
- }
-
- int Question(void)
- {
- char str1[200], str2[200];
-
- sprintf(str1,"%sNode%u/Script%d",Cmds->BBSLoc,Cmds->AcLvl[LVL_NODE_NUMBER],Online_Baud);
- sprintf(str2,"%sNode%u/Answers",Cmds->BBSLoc,Cmds->AcLvl[LVL_NODE_NUMBER]);
-
- return(Questionaire(str1,str2));
- }
-
-